<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <base target="_blank"/>
    <title>JS对象</title>

    <script>
        /**
         * 使用系统的构造方法创建对象,无法获取对象的类型
         */
        var obj = new Object();
        //指定属性
        obj.name = "slx";
        obj.age = 12;
        //指定方法
        obj.eat = function () {
            //this表示obj这个对象
            console.debug(this.name + "...eat")
        };

        //使用属性和方法
        console.debug(obj.name + "..." + obj.age);
        obj.eat();

        /**
         * 使用工厂模式创建对象
         */
        function createObject(name, age) {
            var obj = new Object();
            obj.name = name;
            obj.age = age;
            obj.info = function () {
                console.debug("工厂创建的对象，名称为" + this.name + ",年龄为" + this.age)
            }
            return obj;
        }

        //使用
        var dog = createObject("小黄", 1);
        dog.info();
        var bob = createObject("bob", 12);
        bob.info();

        /**
         * 使用自定义构造函数创建对象
         * 1.构造函数与普通函数的区别在于构造函数首字母大写
         *
         *  自定义构造函数做了以下步骤：
         * 1. 在内存中开辟(申请一块空闲的空间)空间,存储创建的新的对象
         * 2. 把this设置为当前的对象
         * 3. 设置对象的属性和方法的值
         * 4. 把this这个对象返回
         */
        //自定义Person的构造函数
        function Person(name, age) {
            //this就指代当前Person对象
            this.name = name;
            this.age = age;
            this.info = function () {
                alert(this.name + ".." + this.age)
            }
        }

        var xiaoming = new Person("xiaoming", 12);
        //返回true
        alert(xiaoming instanceof Person);
        xiaoming.info();

        /**
         * 使用字面量方式创建对象，都是json的字符串形式
         */

        var valObj = {};
        valObj.name = "valObj";
        //也可以使用 设置属性
        valObj["name"]="newName";
        valObj.eat = function () {
            console.debug("value Obj eat" + this.name);
        }
        //调用方法
        valObj["eat"]();

        //方式二
        var valObj2 = {
            name: "valObj2",
            age: 12,
            //方法
            sayHi: function () {
                console.debug(this.name + "sayHi");
            }
        };

        valObj.eat();
        valObj2.sayHi();

    </script>
</head>
<body>


</body>

</html>